package cn.hongxin.sap.conn.util;

import cn.hongxin.sap.conn.dto.ErpFunctionReturnDto;
import cn.hutool.core.collection.CollectionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import java.util.Map;

/**
 * SAP 工具类
 *
 * @author bocong.zheng@getech.cn
 * @since 2020/11/5
 */
public class SapUtil {

    private SapUtil(){

    }

    /**
     *
     * 实体字段加上 @link com.alibaba.fastjson.annotation.JSONField  注解 name 值与 SAP 字段想对应
     *  比如
     *     @JSONField(name = "DN")
     *     private String dn;
     * 将SAP 返回值 转换为 出参数据
     * @param returnDto     SAP 接口 返回值
     * @param clz           SAP 出参类型
     * @param <T>
     * @return
     */
    public static  <T> T convertOutput(ErpFunctionReturnDto returnDto, Class<T> clz) {
        JSONObject outputJson = new JSONObject();
        convertToJson(returnDto.getSimpleMap(), outputJson);
        convertToJson(returnDto.getStructMap(), outputJson);
        convertToJson(returnDto.getTablesMap(), outputJson);
        return JSON.toJavaObject(outputJson, clz);
    }

    /**
     * map 转 JSON 数据
     * @param objectMap
     * @param pJson
     */
    private static void convertToJson(Map<String, ?> objectMap, JSONObject pJson) {
        if (CollectionUtil.isNotEmpty(objectMap)) {
            objectMap.forEach((k, v) -> {
                pJson.put(k, v);
            });
        }
    }

    /**
     * 将入参转换为JSON 字符串
     * @param obj
     * @return
     */
    public static String convertInput(Object obj){
        return JSON.toJSONString(obj);
    }

}
